
## 股票算法
class Algorithm():
    def __init__(self,highlist,lowlist,openlist,prilist,vollist,rangelist,stock):
        # 最高价
        self.highlist = highlist
        # 最低价
        self.lowlist = lowlist
        # 开盘价
        self.openlist = openlist
        # 收盘价
        self.prilist = prilist
        # 成交量
        self.vollist = vollist
        # 涨幅
        self.rangelist = rangelist
        sum = 0
        for i in range(5):
            sum = prilist[i] + sum
        # 五日均线
        self.five = sum / 5
        self.stock = stock
    def compare(self,A,B,per):
        # per表示A与B的比例差，为0时
        if(A*100 - B*100 - B*per)>=0:
            return True
        else:
            return False
    def sharesSize1(self):
        ### 回龙壁（一个大阳线加一根阴线）
        # 当天的收盘价在五日均线以上
        if self.prilist[0] < self.five:
            return False
        # 前一天的涨幅小于9个点
        if self.rangelist[1] > 9:
            return False
        #当天的最高价低于前一天
        if self.highlist[0] > self.highlist[1]:
            return False
        # 当天的成交量要小于前一天
        if self.vollist[0] > self.vollist[1]:
            return False
        # 前一天的涨幅要在5个点以上
        if self.rangelist[1] < 5:
            return False
        # 当天的跌幅要小于前一天的涨幅
        if abs(self.rangelist[0]) > self.rangelist[1] or self.rangelist[0] > 0:
            return False
        # 当天的跌幅要大于前一天的一半
        # if abs(self.rangelist[0]) < self.rangelist[1]/2:
        #     return False
        # 当天的跌幅大于2个点
        if abs(self.rangelist[0]) < 2:
            return False
        # 前一天的收盘价要小于最高价1个点
        if self.compare(self.highlist[1],self.prilist[1],2):
            return False
        return True
    def sharesSize2(self):
        ### 三分剑术（一根大阳线加三根小阴线）
        # 第一天涨幅在5点以上
        if self.rangelist[3] < 5:
            return False
        # 第一天要是光头阳线
        if self.compare(self.highlist[3],self.prilist[3],1):
            return False
        # 4天的最高价依次降低
        for i in range(3):
            if(self.highlist[i]>self.highlist[i+1]):
                return False
        # 最后一天的收盘价高于第一天的最低价
        if self.prilist[0] < self.lowlist[3]:
            return False
        return True
    def sharesSize3(self):
        ### 芙蓉金针 （两根锤子线，一阴一阳）
        # 当天的最低价要在收盘价2%以下
        if not self.compare(self.prilist[0],self.lowlist[0],2):
            return False
        # 前一天的最低价要在收盘价2%以下
        if not self.compare(self.prilist[1],self.prilist[1],2):
            return False
        # 当天和前一天的收盘价要在五日线以上
        if self.prilist[0] < self.five or self.prilist[1] < self.five:
            return False
        # 当天的涨幅小于2%且为阳线
        if self.rangelist[0] < 0 or self.rangelist[0] > 2:
            return False
        # 前一天的涨幅小于2%且为阴线
        if self.prilist[1] - self.openlist[1] > 0:
            return False
        if self.compare(self.openlist[1],self.prilist[1],2):
            return False
        return True
    def sharesSize4(self):
        ### 齐眉棍法 （两根价格差不都的十字星）
        # 当天和前一天的开盘价都高于最低价1%以上
        if not self.compare(self.openlist[0],self.lowlist[0],1):
            return False
        if not self.compare(self.openlist[1],self.lowlist[1],1):
            return False
        # 当天和前一天的收盘价在1%区间内
        if self.compare(self.prilist[0],self.prilist[1],1) or self.compare(self.prilist[1],self.prilist[0],1):
            return False
        # 当天和前一天的开盘价都在五日线以上
        if self.openlist[0] < self.five or self.openlist[1] < self.five:
            return False
        # 当天和前一天的K线皆为红线
        if self.prilist[0] - self.openlist[0] < 0 or self.prilist[1] - self.openlist[1] < 0:
            return False
        # 当天和前一天的涨幅都在1%以下
        if self.compare(self.prilist[0],self.openlist[0],1) or self.compare(self.prilist[1],self.openlist[1],1):
            return False
        return True
